package Formularios;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import net.miginfocom.swing.MigLayout;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import org.eclipse.wb.swing.FocusTraversalOnArray;
import java.awt.Component;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;

public class frmEntradas extends JFrame {

	private JPanel contentPane;
	private JTextField txtCodigo;
	private JTextField txtDescripcion;
	private JLabel lblDescripcion;
	private JLabel lblUnidadmed;
	private JTextField txtUnidadMed;
	private JLabel lblExistencia;
	private JTextField txtExistencia;
	private JLabel lblEntrada;
	private JTextField txtEntrada;
	private JLabel lblExFinal;
	private JTextField txtExistenciaFinal;
	private JTable table;
	private StatusBar sbMensaje;
	
	//NEMONICOS
	static final int COL_COD_REACTIVO = 0;
	static final int COL_DESCRIPCION = 1;
	static final int COL_EXISTENCIA_ANT = 2;
	static final int COL_ENTRADA = 3;
	static final int COL_EXISTENCIA_FIN = 4;
	//teclas Virtuales
	static final int VK_SALTO_DE_LINEA = 10;
	static final int VK_F5 = 116;
	static final int VK_SUPR = 127;
	
	static Statement comando;
	static Connection con;
	static int iRenglon = 0;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					frmEntradas frame = new frmEntradas();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public frmEntradas() {
		setResizable(false);
		setTitle("Entrada de Materia Prima");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 660, 454);
		// Centrar
		setLocationRelativeTo(null);
		
		general gen = new general();
		try {
			comando = gen.abrirConexion(cNemonicos.IP_GLOBAL,1);
		} catch (ClassNotFoundException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		} catch (SQLException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblCodigo = new JLabel("Codigo: ");
		lblCodigo.setHorizontalAlignment(SwingConstants.CENTER);
		lblCodigo.setBounds(27, 36, 70, 15);
		contentPane.add(lblCodigo);
		
		txtCodigo = new JTextField();
		txtCodigo.addFocusListener(new FocusAdapter() {
			@Override
			public void focusGained(FocusEvent arg0) {
				if ( iRenglon > 0 )
				{
					sbMensaje.setText("[ ENTER ] Continuar  ,  [ F5 ] Guardar");
				}
				else
				{
					sbMensaje.setText("[ ENTER ] Continuar");
				}
				
			}
		});
		txtCodigo.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent arg0) {
				switch (arg0.getKeyCode()) {
				case VK_SALTO_DE_LINEA:
					if ( conslutarNombreReactivo(Integer.parseInt(txtCodigo.getText())) )
					{
						txtEntrada.requestFocus();
					}
					break;
				case VK_F5:
						guardar();
						limpiarEntrada();
						limpiarGrid();
					break;

				default:
					break;
				} 				
			}
		});
		txtCodigo.setBounds(27, 56, 61, 19);
		contentPane.add(txtCodigo);
		txtCodigo.setColumns(10);
		
		txtDescripcion = new JTextField();
		txtDescripcion.setFocusable(false);
		txtDescripcion.setEditable(false);
		txtDescripcion.setBounds(100, 56, 204, 19);
		contentPane.add(txtDescripcion);
		txtDescripcion.setColumns(10);
		
		lblDescripcion = new JLabel("Descripcion: ");
		lblDescripcion.setHorizontalAlignment(SwingConstants.CENTER);
		lblDescripcion.setBounds(109, 36, 195, 15);
		contentPane.add(lblDescripcion);
		
		lblUnidadmed = new JLabel("UM.");
		lblUnidadmed.setHorizontalAlignment(SwingConstants.CENTER);
		lblUnidadmed.setBounds(316, 36, 39, 15);
		contentPane.add(lblUnidadmed);
		
		txtUnidadMed = new JTextField();
		txtUnidadMed.setFocusable(false);
		txtUnidadMed.setEditable(false);
		txtUnidadMed.setBounds(316, 56, 39, 19);
		contentPane.add(txtUnidadMed);
		txtUnidadMed.setColumns(10);
		
		lblExistencia = new JLabel("Existencia :");
		lblExistencia.setBounds(367, 36, 80, 15);
		contentPane.add(lblExistencia);
		
		txtExistencia = new JTextField();
		txtExistencia.setFocusable(false);
		txtExistencia.setEditable(false);
		txtExistencia.setBounds(367, 56, 80, 19);
		contentPane.add(txtExistencia);
		txtExistencia.setColumns(10);
		
		lblEntrada = new JLabel("Entrada :");
		lblEntrada.setBounds(459, 36, 70, 15);
		contentPane.add(lblEntrada);
		
		txtEntrada = new JTextField();
		txtEntrada.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				if ( e.getKeyCode() == VK_SALTO_DE_LINEA )
				{
					if ( txtEntrada.getText().length() > 0 )
					{
						int iExistencia = Integer.parseInt(txtExistencia.getText());
						int iEntrada = Integer.parseInt(txtEntrada.getText());
						txtExistenciaFinal.setText( String.valueOf(iExistencia + iEntrada));
						
						table.setValueAt(Integer.parseInt(txtCodigo.getText()), iRenglon, COL_COD_REACTIVO);
						table.setValueAt(txtDescripcion.getText(), iRenglon, COL_DESCRIPCION);
						table.setValueAt(Integer.parseInt(txtExistencia.getText()), iRenglon, COL_EXISTENCIA_ANT);
						table.setValueAt(Integer.parseInt(txtEntrada.getText()), iRenglon, COL_ENTRADA);
						table.setValueAt(Integer.parseInt(txtExistenciaFinal.getText()), iRenglon, COL_EXISTENCIA_FIN);
						iRenglon++;
						limpiarEntrada();
						txtCodigo.requestFocus();
					}
				}
			}
		});
		txtEntrada.setBounds(459, 56, 70, 19);
		contentPane.add(txtEntrada);
		txtEntrada.setColumns(10);
		
		lblExFinal = new JLabel("Ex. Final :");
		lblExFinal.setBounds(541, 36, 70, 15);
		contentPane.add(lblExFinal);
		
		txtExistenciaFinal = new JTextField();
		txtExistenciaFinal.setFocusable(false);
		txtExistenciaFinal.setEditable(false);
		txtExistenciaFinal.setBounds(541, 56, 70, 19);
		contentPane.add(txtExistenciaFinal);
		txtExistenciaFinal.setColumns(10);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(27, 113, 596, 218);
		contentPane.add(scrollPane);
		
		table = new JTable();
		table.setModel(new DefaultTableModel(
			new Object[][] {
				{null, null, null, null, null},
				{null, null, null, null, null},
				{null, null, null, null, null},
				{null, null, null, null, null},
				{null, null, null, null, null},
				{null, null, null, null, null},
				{null, null, null, null, null},
				{null, null, null, null, null},
				{null, null, null, null, null},
				{null, null, null, null, null},
				{null, null, null, null, null},
				{null, null, null, null, null},
			},
			new String[] {
				"Codigo", "Descripcion", "Existencia Ant", "Entrada", "Existencia Final"
			}
		) {
			Class[] columnTypes = new Class[] {
				Integer.class, String.class, Integer.class, Integer.class, Integer.class
			};
			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}
			boolean[] columnEditables = new boolean[] {
				false, false, false, false, false
			};
			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		});
		table.getColumnModel().getColumn(0).setMaxWidth(100);
		table.getColumnModel().getColumn(1).setPreferredWidth(200);
		table.getColumnModel().getColumn(1).setMaxWidth(300);
		table.getColumnModel().getColumn(2).setPreferredWidth(107);
		table.getColumnModel().getColumn(2).setMaxWidth(150);
		table.getColumnModel().getColumn(3).setMaxWidth(100);
		table.getColumnModel().getColumn(4).setPreferredWidth(105);
		table.getColumnModel().getColumn(4).setMaxWidth(150);
		scrollPane.setViewportView(table);
		
		sbMensaje = new StatusBar();
		sbMensaje.setHorizontalAlignment(SwingConstants.CENTER);
		sbMensaje.setBounds(0, 395, 658, 26);
		contentPane.add(sbMensaje);
		contentPane.setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[]{txtCodigo, txtEntrada}));
		setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[]{txtCodigo, txtEntrada}));
	}
	
	public boolean conslutarNombreReactivo(int iCodigo) {

		boolean bResultado = true;
		try {

			// Una variable String para almacenar la sentencia SQL
			String query = "select trim(descripcion) as descripcion, unidadmedida, existencia from reactivos where codigo = "
					+ iCodigo + ";";

			ResultSet resultado = comando.executeQuery(query);

			// Ejecutamos la consulta SQL
			if (resultado.next()) {
				txtDescripcion.setText(resultado.getString("descripcion"));
				txtUnidadMed.setText(resultado.getString("unidadmedida"));
				txtExistencia.setText(String.valueOf(resultado.getInt("existencia")));
			}
			else
			{
				bResultado = false;
			}

		} catch (SQLException e) {
			bResultado = false;
			// Por si ocurre un error
			System.out.println(e.getMessage());
			int op = JOptionPane.showOptionDialog(null, e.getMessage(),
					"Entrada Invalidad", JOptionPane.YES_OPTION,
					JOptionPane.ERROR_MESSAGE, null,
					new Object[] { "ACEPTAR" }, "ACEPTAR");
			if (op == 0) {

			}
		}

		return bResultado;
	}
	
	public void limpiarEntrada()
	{
		txtCodigo.setText("");
		txtDescripcion.setText("");
		txtEntrada.setText("");
		txtExistencia.setText("");
		txtExistenciaFinal.setText("");
		txtUnidadMed.setText("");
	}
	public void limpiarGrid()
	{		
		for (int iRen = 0; iRen < table.getRowCount(); iRen++) {
			table.setValueAt(null,iRen, COL_COD_REACTIVO);
			table.setValueAt(null,iRen, COL_DESCRIPCION);
			table.setValueAt(null,iRen, COL_ENTRADA);
			table.setValueAt(null,iRen, COL_EXISTENCIA_ANT);
			table.setValueAt(null,iRen, COL_EXISTENCIA_FIN);			
		}
		iRenglon = 0;
	}
	
	public boolean guardar() {
		boolean bResultado = true;
		String query = null;
		int iNumEntrada = 0;
		
		general.generarTransaccion(comando, "Begin");
		
		try {
			
			iNumEntrada = general.consultarFolio(comando,1,cNemonicos.INCREMENTAR_SECUENCIA);

			for (int Ren = 0; Ren < iRenglon; Ren++) {
				int iCodReactivo = (int) table.getValueAt(Ren, COL_COD_REACTIVO);
				int iEntrada = (int) table.getValueAt(Ren, COL_ENTRADA);
				
				// insertar detalle
				query = String.format("SELECT reguardarentrada('2','R'," + iNumEntrada + "," + iCodReactivo + "," + iEntrada + ")");
				System.out.println(query);
				cTotal insertar = new cTotal(comando);
				insertar.ejecutar(query);

			}
			
			// insertar Encabezado
			query = String.format("SELECT reguardarentrada('1','R'," + iNumEntrada + ",0,0 )");
			System.out.println(query);
			cTotal insertar = new cTotal(comando);
			insertar.ejecutar(query);
			general.generarTransaccion(comando, "Commit");

		} catch (SQLException e) {
			general.generarTransaccion(comando, "Rollback");
			general.grabarError("frmEntradas", "guardar", -1, query, e.getMessage(),"Error al insertar Entradas");
			// TODO Auto-generated catch block
			bResultado = false;
			e.printStackTrace();
		}

		return bResultado;
	}

}
